汶川受害者我为祈祷``走好!! 问个汇编问题`

来源:百度知道 编辑:UC知道 时间:2024/07/02 11:44:39
子程序名:DSTOV
功能:把一个十进制数串转化为对应的数值
入口参数: EDX=字符串开始地址偏移
CX=字符串长度
出口参数: EAX=接收到的无符号数
BL=0 表示没有接收到数
BL=1 表示接收到的数符合要求
BL=-1 表示接收到的数无效
DSTOV PROC NEAR
PUSH ESI
MOV ESI,EDX
MOV BL,0
JCXZ DTV3
MOV BL,-1
XOR EAX,EAX
MOV EDX,10 问题1
PUSH EDX
DTV1: MOV DL,[ESI]
INC ESI
CMP DL,'0'
JB SHORT DTV2
CMP DL,'9'
JA SHORT DTV2
AND DL,0FH
PUSH EDX
MUL DWORD PTR [ESP+4] 问题2
OR DL,DL
POP EDX
JNZ SHORT DTV2
ADD EAX,EDX
JC DTV2
LOOP DTV1
MOV BL,1
DTV2: POP EDX
DTV3: POP ESI
RET

问题3:这个程序的功能是—将程序中字符串如
st db '123456' 转化成 eax=123456d
问题2:eax开始时为确实为0,程序处理第一个字符1时,1存在dl中,0*[ESP+4]=0,然后将edx加eax存到eax,此时eax=1了;接着处理第二个字符时,2存在dl中,eax=1,所以有1*[ESP+4]=eax,然后eax+edx=eax 这里edx=dl=2,接着继续进行第三个字符处理……
相信到这你已经猜到了,[ESP+4]就是问题1中你问的EDX为什么是10,只有1*10+2才会成12,这么来说或许好点[esp]是它上边第一个push的值[esp+4]是它上边第一个的前一个push的值,也就是 mov edx,10
push edx 这个地方的10